Current complex programmable logic device (CPLD) product term allocation schemes tend to restrict allocation of product terms to macrocells within a logic block Likewise, placement of logic equations in the macrocells of a logic block is also restricted. To allow for unrestricted allocation-of product terms and placement of logic equations in macrocells, a PLA (Programmable Logic Array) structure may be used. However, in a CPLD, a PLA structure is very costly in both die area and performance.
The main disadvantage of current product term allocation methods is once logic equations are partitioned into a logic block, the macrocells that the logic equations can be placed into are restricted. Logic and/or signal placement software must take into account the distribution of product terms among the logic equations and the sharing of product terms across multiple logic equations. These restrictions can be a problem when attempting to retain fixed pinouts (e.g., input and output signal definitions) after changes are made to an existing design. Since input/output (I/O) cells are connected directly to macrocells in the logic block, logic changes can create a logic block partition that is a legal partition, but will not support the fixed pinout due to the placement restrictions imposed by product term allocation.
The traditional OR array structure typically found in programmable logic arrays allow any product term in the product term array to be steered to and shared by any of the macrocells in a logic block. For most CPLD designs, however, a product term allocation scheme that can allocate on the granularity of a single product term is not needed. The present invention takes advantage of this fact and creates a PLA-type OR structure that steers and shares groups of product terms instead of single product terms.